const { xhlGet, xhlPatch } = require('../../utils/request')
const UtilModel = require('../../utils/util')

Page({
  data: {
    info: {},
    options: {}
  },

  // 设置当前页面标题
  setPageTitleHandler(title) {
    // 动态设置当前页面的 标题 wx.setNavigationBarTitle
    wx.setNavigationBarTitle({ title: title })
  },

  // 请求商品详细信息
  getGoodsInfoHandler(id) {
    xhlGet('/goods', { id: id - 0 })
      .then(res => this.setData({ info: res[0] }))
  },

  // 加入购物车操作
  addCartHandler() {
    // 暂时这样书写, 后期调整
    const res = UtilModel.checkLogin({
      type: 'nivagation',
      url: '/pages/Detail/Detail?id=' + this.data.options.id + '&title=' + this.data.options.title,
      cb: () => {
        wx.showModal({
          title: '您还没有登录, 是否现在登录',
          complete: (res) => {
            if (res.cancel) return
            if (res.confirm) wx.navigateTo({ url: '/pages/Login/Login' })
          }
        })
      }
    })

    if (!res) return

    // 1. 根据 用户id 拿到当前用户的购物车信息
    xhlGet('/users', { id: wx.getStorageSync('info').id })
    .then(res => {
      // console.log(res[0].cart)
      // 拿到该用户的购物车信息
      const cart = res[0].cart

      // 进行判断, 当前购物车内是否有当前这件商品信息
      // 需要借助一个 find 的方法
      const info = cart.find(item => item.id === this.data.info.id) 

      if (!info) {
        // 购物车内当前没有这件商品
        // 直接追加
        // 把当前的数据信息复制一份
        const goods = Object.assign(this.data.info)
        // 添加上一个购买数量
        goods.number = 1
        goods.is_select = false
        cart.push(goods)
      } else {
        // 购物车内有这件商品
        // 修改购买数量即可
        info.number += 1
      }

       // 把修改完的 cart 重新提交给服务器
      // 不能使用 post 请求了, 需要使用 patch
      xhlPatch('/users/' + wx.getStorageSync('info').id, { cart: cart })
      .then(() => {
        wx.showToast({ title: '加入购物车成功' })
      })
    })
  },

  // 页面打开的时候就会触发的生命周期
  // options 就是你来到这个页面的时候的 查询字符串
  // /Detail/Detail?a=100&b=200
  onLoad(options) {
    this.setData({ options: options })
    // 请求当前商品的详细信息
    this.getGoodsInfoHandler(options.id)

    // 设置当前页面的标题
    this.setPageTitleHandler(options.title)
  }
})

/* 加入购物车的逻辑 
  需要拿到的信息
    => 用户 id, 请求到用户的 cart
    => 商品信息, 要添加的商品信息
  需要进行的逻辑有几种
    1. 所有的数据表是分开的【 开发环境 】
      => cart, users, goods
      => cart 
        [ { userid: 1, goodsId: 2, number: 10 } ]
      => users
        [ { id: 1, nickname: '小灰狼' } ]
      => goods
        [ { id: 2, title: 'xxx' } ]
      => 如何操作不用我们操心, 按照接口文档给的要求去请求
    2. 模拟数据查找【 数据模拟 】
      => cart 和 user 是在一起的
      => 我们需要自己请求到当前用户信息的 cart 部分
      => 进行判断是否添加
  如何实现添加逻辑
    1. 判断当前购物车内是否有这件商品
    2. 如果没有, 直接追加
    3. 如果有, 那么在当前这个商品的购买数量上 +1
*/